//import org.omg.CORBA_2_3.portable.OutputStream;

import java.io.*;

public class Test01 {
    public static void main(String[] args) {
    test01();
    test02();
    test03();
    }
    /**
     * 方法描述:缓冲流：使用输入流读取一个文件内容到cpu中，然后使用输出流将内容写出到指定位置的外部文件中。
     * （使用输入输出留进行文件的复制）
     */
    public static void test03(){
        //Reader is;
        //Writer os;
        try(
        //创建一个输入流对象   设计模式：装饰器模式
            BufferedReader is =new BufferedReader(
                   new InputStreamReader(
                           new FileInputStream("D:\\testio\\li.txt")
                   ));
            //输出流对象  //会出现乱码
        //构造方法的第二个参数决定写入文件的内容是接着写还是从头开始覆盖写；
        //默认值是false，从头开始覆盖写；true，从末位接着写
            BufferedWriter os=new BufferedWriter(
                    new OutputStreamWriter(
                            new FileOutputStream("D:\\testio\\li_03.txt")
                    ))){
            //OutputStream os=new FileOutputStream("D:\\li_01.txt");
            //用于读取输入流的字节数组
            //String [] b=new String[1024];
            //将输入流的内容读取到用于存储思维字节数组中
           String str=is.readLine();
           while(str!=null){
                //在使用输出流输出内容
                os.write(str);
                //换行
               os.write("\n");
               //换行操作
               os.newLine();
                System.out.println("ok");
                //继续往下读
                str=is.readLine();
            }
        }catch (FileNotFoundException e){
            e.printStackTrace();

        }catch (IOException e){
            e.printStackTrace();
        }
    }
    /**
     * 方法描述:字符流：使用输入流读取一个文件内容到cpu中，然后使用输出流将内容写出到指定位置的外部文件中。
     * （使用输入输出流进行文件的复制）
     */
    public static void test02(){
        try(//创建一个输入流对象
          Reader is =new FileReader("D:\\testio\\li.txt");
            //输出流对象
          Writer os=new FileWriter("D:\\testio\\li_02.txt",true);
            //OutputStream os=new FileOutputStream("D:\\li_01.txt");
        ){
            //用于读取输入流的字节数组
            char [] b=new char[1024];
            //将输入流的内容读取到用于存储思维字节数组中
            int len =is.read(b);
           /*if (len!=-1){
               os.write(b);
           }
           */
            while (len!=-1){
                //在使用输出流输出内容
                os.write(b,0,len);
                System.out.println("ok");
                //继续往下读
                len=is.read();
            }
        }catch (FileNotFoundException e){
            e.printStackTrace();

        }catch (IOException e){
            e.printStackTrace();
        }//
        // finally {
         //   if(is!=null);
       // } 关闭is，os
    }


    /**
     * 方法描述：字节流：使用输入流读取一个文件内容到cpu中，然后使用输出流将内容写到指定位置的外部文件中
     * （使用输入输出流进行文件的复制）
     */
   public static void test01(){
       try{
           //创建一个输入流对象
           InputStream is =new FileInputStream("D:\\testio\\li.txt");
           //输出流对象
           OutputStream os=new FileOutputStream("D:\\testio\\li_01.txt",true);
           //OutputStream os=new FileOutputStream("D:\\li_01.txt");
           //用于读取输入流的字节数组
           byte[] b=new byte[1024];
           //将输入流的内容读取到用于存储思维字节数组中
           int len =is.read(b);
           /*if (len!=-1){
               os.write(b);
           }
           */
           while (len!=-1){
               //在使用输出流输出内容
               os.write(b,0,len);
               System.out.println("ok");
               //继续往下读
               len=is.read();
           }
           is.close();
           os.close();

       }catch (FileNotFoundException e){
           e.printStackTrace();

       }catch (IOException e){
           e.printStackTrace();
       }
   }

}


